#pragma once

#include "vrdatacore_global.h"
#include <QString>
#include "notransformactor.h"

namespace VrDataCore
{
	class VRDATACORE_EXPORT ProfessionPropertyDefine:public NoTransformActor
	{
	public:
		ProfessionPropertyDefine(void);
		virtual ~ProfessionPropertyDefine(void);
		//map
		virtual void buildPropertyMap();
		virtual void onMapLoadBegin(CoreBase::Map*){}
		virtual void onMapLoadEnd(CoreBase::Map*);
		virtual osg::ref_ptr<CoreBase::ActorBase> clone();
		//property
		void setOwnerId(QString id);
		QString getOwnerId();
		void setPropertyStringList(QString value);
		QString getPropertyStringList();
		//operate function
		void addPropertyGroup(const QString& groupname);
		void renamePropertyGroup(const QString& oldname,const QString& newname);
		void deletePropertyGroup(const QString& groupname);
		void addPropertyInGroup(const QString& groupname,const QString& propertyname,const QString& value);
		void renameProperty(const QString& groupname,const QString& oldname,const QString& newname);
		void deletePropertyFromGroup(const QString& groupname,const QString& propertyname);
		void propertyChangeGroup(const QString& propertyname,const QString& fromgroup,const QString& togroup);
		//update data
		void setPropertyValue(const QString& propertyname,const QString& value);
		QMap<QString,QString> getPropertyByGroupName(const QString& groupname);
		QMap<QString,QMap<QString,QString>>	getAllPropertyData();
		bool containsGroup(const QString& name);
		bool containsProperty(const QString& name);
		QString getPropertyValue(const QString& key);
	protected:
		virtual void addToMapEnd(CoreBase::Map*);
		virtual void removeFromMapEnd(CoreBase::Map*){}
		void clearAllPropertyData();
	private:
		void stringToMap();
		QString									_propertyStringList;
		QMap<QString,QMap<QString,QString>*>	_allPropertyData;
		QString									_ownerId;
		QString									_defaultGroup;
	};
}